A redundant array of independent disks (“RAID”) is a system for computer data storage that divides and replicates data among multiple hard drives. The different types of RAID systems are named by the word RAID followed by a number, as in RAID 0, RAID 1, RAID 5, etc. RAID's various designs increase data reliability and/or increase input/output performance. When multiple hard drives are set up to use RAID technology, they are said to be in a RAID array. This array distributes data across multiple disks, but the computer user sees the array as one single disk.
There are several key concepts in RAID. Mirroring is the copying of data to more than one disk. Striping is the splitting of data across more than one disk. And error correction is done where redundant data is stored to allow problems to be detected and fixed. Redundancy is achieved by either writing the same data to multiple drives (known as “mirroring”), or collecting data (known as “parity data”) across the RAID array, calculated such that the failure of one or more disks in the array will not result in the loss of data. The various RAID arrays give different trade-offs of protection against data loss, capacity, and speed. RAID levels 0, 1, and 5 are the most commonly found, however other RAID arrays also exist.
RAID 0 (striped disks) distributes data across multiple disks in a way that gives improved speed at any given instant. If one disk fails, however, all of the data on the array will be lost, and there is neither parity nor mirroring. RAID 1 (mirroring) mirrors the contents of the disks, making a form of 1:1 ratio real-time backup. The contents of each disk in the array are identical to that of every other disk in the array. RAID 5 (striped disks with distributed parity) combines three or more disks in a way that protects data against the loss of any one disk. Parity information is spread across the disk array, and is used to recover lost information, for example if a single drive fails.
RAID migration is a process of converting a RAID array from one RAID type to another RAID type. For example, migrating from a RAID 0 to RAID 1, from RAID 1 to RAID 5, and from a three-disk RAID 5 array to a four-disk RAID 5 array, etc.
FIG. 1 (Prior Art) is a timing diagram showing the usual sequence of migrating a one-disk stripe array to a two-disk mirror array. D0 is a source Disk 0, and D1 is a destination Disk 1. R D0 0-3 means read block 0 to block 3 from Disk 0. Similarly, W D1 0-3 means write block 0 to block 3 to Disk 1.
By analyzing the operation patterns, it is seen that there are two idle periods that reduce performance. The first idle period is the time between two consecutive read operations on Disk 0, for example a first read operation 102 and a second read operation 104. The second idle period is the time between two consecutive write operations on Disk 1, for example a first write operation 106 and a second write operation 108. The cause of these idle periods is that this algorithm takes strict steps in each round, such that the read operation in the next round does not start until the write operation in the previous round is complete. By performing in this manner, only a very small memory is required as the read data is immediately written in the next process. Unfortunately, performance is relatively slow.